--- title: "L2-041 插松枝" created: 2025-11-28 tags: - 算法 --- # L2-041 插松枝 ## 题目 [L2-041 插松枝](https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1518582268930473984&page=1) ![[image-3e29a287.png]] ## 思路分析 ## 代码实现 ```cpp #include using namespace std; #define endl '\n' #define int long long using ll = long long; using ull = unsigned long long; using PII = pair; using Pll = pair; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; const int inf = 0x3f3f3f3f; queue q; stack s; int n, m, k; signed main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> n >> m >> k; while (n--) { int x; cin >> x; q.push(x); } while (q.size() || s.size()) { int cnt = 0, last = inf; vector curr_branch; while (cnt < k) { if (s.size() && s.top() <= last) { curr_branch.push_back(s.top()); last = s.top(); s.pop(); cnt++; } else if (q.size()) { int t = q.front(); if (t <= last) { curr_branch.push_back(t); last = t; q.pop(); cnt++; } else if (s.size() < m) { s.push(t); q.pop(); } else { break; // 小盒子已满,还不能用 → 结束当前枝 } } else { break; // 推送器空了 } } // 输出一根枝 for (int i = 0; i < curr_branch.size(); i++) { if (i) cout << " "; cout << curr_branch[i]; } cout << endl; } return 0; } ``` ## 同类题型 ## 视频讲解 --- ⬅️ [[L2-040 哲哲打游戏|L2-040 哲哲打游戏]] 🏠 [[00-天梯赛]] ➡️ [[L2-042 老板的作息表|L2-042 老板的作息表]]